package thread;

/**
 * 类说明：演示Volatile的提供的可见性
 * <p>
 * volatile保证变量的可见性(意思就是一个线程对数据的修改,其他线程可见),但并不能保证数据操作的原子性,
 * 所以volatile适用于一个线程写数据多个线程读数据的操作(一写多读)
 */
public class VolatileCase {
    //不使用volatile修饰的话,PrintThread线程就感知不到此变量的修改,会一直运行下去
    private static volatile boolean ready;
    private static int number;

    //
    private static class PrintThread extends Thread {
        @Override
        public void run() {
            System.out.println("PrintThread is running.......");
            while (!ready) ;//无限循环
            System.out.println("number = " + number);
        }
    }

    public static void main(String[] args) {
        new PrintThread().start();
        SleepTools.second(1);
        number = 51;
        ready = true;
        SleepTools.second(5);
        System.out.println("main is ended!");
    }
}
